\section{Systemfunktionalität}
\label{sec:systemfunktionalität}
In diesem Abschnitt werden die Customer Requirements in Form von Use Cases dokumentiert. Sie dienen als Basis für Ermittlung der Development Requirements.
Use Cases haben den grossen Vorteil, dass sich Anforderungen nicht nur textbasiert sondern auch modellbasiert nach dem \acrshort{uml}"=Standard (\acrlong{uml}) definieren lassen.

\subsection{Use Case Diagramm}
\label{subsec:Use Case Diagramm}
Das Use Case Diagramm in \autoref{fig:use_case_uebersicht} zeigt eine Übersicht über sämtliche Use Cases und deren Interaktion untereinander und mit den Akteuren. Aus Übersichtlichkeitsgründen werden die externen Akteure die sich ausserhalb des Systems befinden weggelassen (\vgl{System- und Kontextabgrenzung in \autoref{fig:systemkontext}}).

\begin{figure}[H]
   \centering
   \includegraphics[width=0.9\textwidth]{images/anforderungsanalyse_use_case}
   \caption[Use Case Diagramm]{Use Case Diagramm}
   \label{fig:use_case_uebersicht}
\end{figure}

\subsection{Use Cases}
\label{subsec:Use Cases}
Die nachfolgenden Use Cases werden nach der Schablone aus \cite[S. 78-79]{pohl2010basiswissen} dokumentiert. 

\autoref{tab:uc_xcommander_installieren} dokumentiert den Anwendungsfall \refusecase{uc:xcommander_installieren}.

\begin{longtable}{p{0.31\textwidth}p{0.62\textwidth}}
\caption{\refusecase{uc:xcommander_installieren} - Erweiterung installieren}\label{tab:uc_xcommander_installieren} \\
   \hline
   \textbf{Bezeichner} & \usecase{uc:xcommander_installieren}\\\hline\rowcolor[gray]{0.9}
   \textbf{Name} & Erweiterung installieren\\
   \textbf{Version} & 1.0\\\rowcolor[gray]{0.9}
   \textbf{Autor} & Simon Binkert\\
   \textbf{Priorität} & gross\\\rowcolor[gray]{0.9}
   \textbf{Kritikalität} & gross\\
   \textbf{Referenz} & \reffrequirement{frq:xcommander_installieren}\\\rowcolor[gray]{0.9}
   \textbf{Kurzbeschreibung} & Der Nutzer kann die Erweiterung in seinem Browser installieren.\\
   \textbf{Akteure} & Nutzer\\\rowcolor[gray]{0.9}
   \textbf{Auslösendes Ereignis} & Nutzer möchte XCommander als Browsererweiterung verwenden.\\
   \textbf{Vorbedingung} & Ein unterstützter Browser ist bereits installiert.\\\rowcolor[gray]{0.9}
   \textbf{Nachbedingung} & XCommander kann verwendet werden.\\
   \textbf{Hauptszenario} & 
   	\begin{compactenum}
      \vspace{-12pt}
   	  \item Nutzer startet Browser.
   	  \item Nutzer navigiert zum Downloadbereich der XCommander Webseite.
   	  \item Nutzer lädt die XCommander Erweiterung herunter und entscheidet sich diese zu installieren.
   	  \item Erweiterung wird installiert.
   	  \vspace{-12pt}
   	\end{compactenum}\\\rowcolor[gray]{0.9}
   \textbf{Alternativszenarien} & 
   	\begin{compactenum}
   	  \vspace{-12pt}
   	  \item[2a.] Nutzer navigiert zum Add-On Store des Browsers und sucht nach der XCommander Erweiterung.
   	  \vspace{-12pt}
   	\end{compactenum}\\
   \textbf{Ausnahmeszenarien} & -\\\rowcolor[gray]{0.9}
   \textbf{Qualitäten} & \refqrequirement{qrq:usability}\\\hline 
\end{longtable}
\newpage
\autoref{tab:uc_xcommander_updaten} dokumentiert den Anwendungsfall \refusecase{uc:xcommander_updaten}.
\begin{longtable}{p{0.31\textwidth}p{0.62\textwidth}}
\caption{\refusecase{uc:xcommander_updaten} - Erweiterung updaten}\label{tab:uc_xcommander_updaten} \\
   \hline
   \textbf{Bezeichner} & \usecase{uc:xcommander_updaten} \\\hline\rowcolor[gray]{0.9}
   \textbf{Name} & Erweiterung updaten\\
   \textbf{Version} & 1.0\\\rowcolor[gray]{0.9}
   \textbf{Autor} & Simon Binkert\\
   \textbf{Priorität} & mittel\\\rowcolor[gray]{0.9}
   \textbf{Kritikalität} & mittel\\
   \textbf{Referenz} & \reffrequirement{frq:xcommander_updaten}\\\rowcolor[gray]{0.9}
   \textbf{Kurzbeschreibung} & Der Nutzer kann die XCommander Erweiterung aus dem Browser aktualisieren.\\
   \textbf{Akteure} & Nutzer\\\rowcolor[gray]{0.9}
   \textbf{Auslösendes Ereignis} & Der Nutzer hat die Erweiterung bereits zu einem früheren Zeitpunkt installiert und es ist eine neue Version der Erweiterung auf dem Update"=Server verfügbar.\\
   \textbf{Vorbedingung} & Erweiterung wurde bereits in einer früheren Version installiert.\\\rowcolor[gray]{0.9}
   \textbf{Nachbedingung} & XCommander kann in der neusten Version verwendet werden.\\
   \textbf{Hauptszenario} & 
   	\begin{compactenum}
   	  \vspace{-12pt}
   	  \item Nutzer startet Browser.
   	  \item Nutzer navigiert zu den installierten Erweiterungen.
   	  \item Der Browser zeigt allfällige Updates der Erweiterung an. Der Nutzer entscheidet sich diese zu installieren.
   	  \item Erweiterung wird aktualisiert.
   	  \vspace{-12pt}
   	\end{compactenum}\\\rowcolor[gray]{0.9}
   \textbf{Alternativszenarien} & -\\
   \textbf{Ausnahmeszenarien} & -\\\rowcolor[gray]{0.9}
   \textbf{Qualitäten} & \refqrequirement{qrq:usability}\\\hline
\end{longtable}

\newpage
\autoref{tab:uc_xcommander_verwalten} dokumentiert den Anwendungsfall \refusecase{uc:xcommander_verwalten}.
\begin{longtable}{p{0.31\textwidth}p{0.62\textwidth}}
\caption{\refusecase{uc:xcommander_verwalten} - XCommander verwalten}\label{tab:uc_xcommander_verwalten} \\
   \hline
   \textbf{Bezeichner} & \usecase{uc:xcommander_verwalten}\\\hline\rowcolor[gray]{0.9}
   \textbf{Name} & XCommander verwalten\\
   \textbf{Version} & 1.0\\\rowcolor[gray]{0.9}
   \textbf{Autor} & Simon Binkert\\
   \textbf{Priorität} & gross\\\rowcolor[gray]{0.9}
   \textbf{Kritikalität} & mittel\\
   \textbf{Referenz} & \reffrequirement{frq:xcommander_verwalten}, \reffrequirement{frq:xcommand_installieren}, \reffrequirement{frq:xcommand_deinstallieren},  \reffrequirement{frq:xcommand_updaten}, \reffrequirement{frq:xcommand_deactivate}\\\rowcolor[gray]{0.9}
   \textbf{Kurzbeschreibung} & Der Nutzer kann allgemeine Einstellungen der Erweiterung verwalten.\\
   \textbf{Akteure} & Nutzer\\\rowcolor[gray]{0.9}
   \textbf{Auslösendes Ereignis} & Der Nutzer öffnet die Einstellungsseite der  Erweiterung.\\
   \textbf{Vorbedingung} & Die Erweiterung ist im Browser installiert und aktiviert.\\\rowcolor[gray]{0.9}
   \textbf{Nachbedingung} & Änderungen werden gespeichert und sind sofort aktiv.\\
   \textbf{Hauptszenario} & 
   	\begin{compactenum}
   	  \vspace{-12pt}
   	  \item Nutzer startet Browser.
   	  \item Nutzer navigiert zur Einstellungsseite der XCommander Erweiterungen.
   	  \item Nutzer ändert Einstellungen.
   	  \item Neue Einstellungen werden automatisch gespeichert und sind unmittelbar aktiv.
   	  \vspace{-12pt}
   	\end{compactenum}\\\rowcolor[gray]{0.9}
   \textbf{Alternativszenarien} & -\\
   \textbf{Ausnahmeszenarien} & -\\\rowcolor[gray]{0.9}
   \textbf{Qualitäten} & \refqrequirement{qrq:browserunabhängigkeit}, \refqrequirement{qrq:usability}, \refqrequirement{qrq:sicherheit}\\\hline
\end{longtable}

\newpage
\autoref{tab:uc_xcommand_installieren} dokumentiert den Anwendungsfall \refusecase{uc:xcommand_installieren}.
\begin{longtable}{p{0.31\textwidth}p{0.62\textwidth}}
\caption{\refusecase{uc:xcommand_installieren} - XCommand installieren}\label{tab:uc_xcommand_installieren} \\
   \hline
   \textbf{Bezeichner} & \usecase{uc:xcommand_installieren}\\\hline\rowcolor[gray]{0.9}
   \textbf{Name} & XCommand installieren\\
   \textbf{Version} & 1.0\\\rowcolor[gray]{0.9}
   \textbf{Autor} & Simon Binkert\\
   \textbf{Priorität} & gross\\\rowcolor[gray]{0.9}
   \textbf{Kritikalität} & gross\\
   \textbf{Referenz} & \reffrequirement{frq:xcommand_installieren}\\\rowcolor[gray]{0.9}
   \textbf{Kurzbeschreibung} & Der Nutzer kann die Funktion der XCommander Erweiterung um ein XCommand erweitern.\\
   \textbf{Akteure} & Nutzer\\\rowcolor[gray]{0.9}
   \textbf{Auslösendes Ereignis} & Der Nutzer möchte ein beliebiges XCommand verwenden und ausführen.\\
   \textbf{Vorbedingung} & Die Erweiterung ist im Browser installiert und aktiviert.\\\rowcolor[gray]{0.9}
   \textbf{Nachbedingung} & Das XCommand wurde der XCommander Erweiterung hinzugefügt und kann unmittelbar verwendet werden.\\
   \textbf{Hauptszenario} & 
   	\begin{compactenum}
   	  \vspace{-12pt}
   	  \item Nutzer startet Browser.
   	  \item Nutzer navigiert zur Einstellungsseite der XCommander Erweiterungen.
   	  \item Nutzer wählt ein XCommand aus dem lokalen Filesystem und importiert es in die Erweiterung.
   	  \item Das XCommand wird validiert und der Kommandoliste hinzugefügt.
   	  \item Das XCommand kann anschliessend verwendet und ausgeführt werden.
   	  \vspace{-12pt}
   	\end{compactenum}\\\rowcolor[gray]{0.9}
   \textbf{Alternativszenarien} &
    \begin{compactenum}
      \vspace{-12pt}
      \item[2a.] Nutzer lädt ein XCommand direkt von einer Webseite.
      \vspace{-12pt}
    \end{compactenum}\\
   \textbf{Ausnahmeszenarien} & -\\\rowcolor[gray]{0.9}
   \textbf{Qualitäten} & \refqrequirement{qrq:browserunabhängigkeit}, \refqrequirement{qrq:usability}, \refqrequirement{qrq:sicherheit}\\\hline
\end{longtable}

\newpage
\autoref{tab:uc_xcommand_deinstallieren} dokumentiert den Anwendungsfall \refusecase{uc:xcommand_deinstallieren}.
\begin{longtable}{p{0.31\textwidth}p{0.62\textwidth}}
\caption{\refusecase{uc:xcommand_deinstallieren} - XCommand deinstallieren}\label{tab:uc_xcommand_deinstallieren}  \\
   \hline
   \textbf{Bezeichner} & \usecase{uc:xcommand_deinstallieren}\\\hline\rowcolor[gray]{0.9}
   \textbf{Name} & XCommand deinstallieren\\
   \textbf{Version} & 1.0\\\rowcolor[gray]{0.9}
   \textbf{Autor} & Simon Binkert\\
   \textbf{Priorität} & mittel\\\rowcolor[gray]{0.9}
   \textbf{Kritikalität} & mittel\\
   \textbf{Referenz} & \reffrequirement{frq:xcommand_deinstallieren}\\\rowcolor[gray]{0.9}
   \textbf{Kurzbeschreibung} & Der Nutzer kann ein installiertes XCommand aus der Erweiterung entfernen.\\
   \textbf{Akteure} & Nutzer\\\rowcolor[gray]{0.9}
   \textbf{Auslösendes Ereignis} & Der Nutzer benötigt ein XCommand nicht mehr.\\
   \textbf{Vorbedingung} & Das XCommand ist in der Erweiterung installiert.\\\rowcolor[gray]{0.9}
   \textbf{Nachbedingung} & Das XCommand wurde deinstalliert und kann nicht mehr verwendet werden.\\
   \textbf{Hauptszenario} & 
   	\begin{compactenum}
   	  \vspace{-12pt}
   	  \item Nutzer startet Browser.
   	  \item Nutzer navigiert zur Einstellungsseite der XCommander Erweiterungen.
   	  \item Nutzer wählt ein XCommand und betätigt den Deinstallations-Button.
   	  \item Nutzer bestätigt die Deinstallaltion des gewählten XCommands.
   	  \item Das XCommand wurde aus der Kommandoliste entfernt und kann nicht mehr verwendet werden.
   	  \vspace{-12pt}
   	\end{compactenum}\\\rowcolor[gray]{0.9}
   \textbf{Alternativszenarien} & -\\
   \textbf{Ausnahmeszenarien} & -\\\rowcolor[gray]{0.9}
   \textbf{Qualitäten} & \refqrequirement{qrq:browserunabhängigkeit}, \refqrequirement{qrq:usability}\\\hline
\end{longtable}

\newpage
\autoref{tab:uc_xcommand_updaten} dokumentiert den Anwendungsfall \refusecase{uc:xcommand_updaten}.
\begin{longtable}{p{0.31\textwidth}p{0.62\textwidth}}
\caption{\refusecase{uc:xcommand_updaten} - XCommand updaten}\label{tab:uc_xcommand_updaten} \\
   \hline
   \textbf{Bezeichner} & \usecase{uc:xcommand_updaten}\\\hline\rowcolor[gray]{0.9}
   \textbf{Name} & XCommand updaten\\
   \textbf{Version} & 1.0\\\rowcolor[gray]{0.9}
   \textbf{Autor} & Simon Binkert\\
   \textbf{Priorität} & mittel\\\rowcolor[gray]{0.9}
   \textbf{Kritikalität} & gross\\
   \textbf{Referenz} & \reffrequirement{frq:xcommand_updaten}\\\rowcolor[gray]{0.9}
   \textbf{Kurzbeschreibung} & Der Nutzer wird auf ein Update eines XCommands aufmerksam gemacht und kann dieses installieren.\\
   \textbf{Akteure} & Nutzer\\\rowcolor[gray]{0.9}
   \textbf{Auslösendes Ereignis} & Der Nutzer navigiert zur Einstellungsseite der Erweiterung.\\
   \textbf{Vorbedingung} & Mindestens ein XCommand ist in der Erweiterung installiert.\\\rowcolor[gray]{0.9}
   \textbf{Nachbedingung} & Das aktualisierte XCommand kann in der neusten Version verwendet und ausgeführt werden.\\
   \textbf{Hauptszenario} & 
   	\begin{compactenum}
   	  \vspace{-12pt}
   	  \item Nutzer startet Browser.
   	  \item Nutzer navigiert zur Einstellungsseite der XCommander Erweiterungen.
   	  \item Die Erweiterung prüft für jedes XCommand, ob ein Update verfügbar ist.
   	  \item Ist ein Update verfügbar, wird der Nutzer darauf aufmerksam gemacht und kann dieses installieren.
   	  \item {Das aktualisierte XCommand kann verwendet und ausgeführt werden.}
   	  \vspace{-12pt}
   	\end{compactenum}\\\rowcolor[gray]{0.9}
   \textbf{Alternativszenarien} & -\\
   \textbf{Ausnahmeszenarien} & -\\\rowcolor[gray]{0.9}
   \textbf{Qualitäten} & \refqrequirement{qrq:browserunabhängigkeit}, \refqrequirement{qrq:usability}, \refqrequirement{qrq:sicherheit}\\\hline
\end{longtable}


\newpage
\autoref{tab:uc_xcommand_deactivate} dokumentiert den Anwendungsfall \refusecase{uc:xcommand_deactivate}.
\begin{longtable}{p{0.31\textwidth}p{0.62\textwidth}}
\caption{\refusecase{uc:xcommand_deactivate} - XCommand de- bzw. reaktivieren}\label{tab:uc_xcommand_deactivate} \\
   \hline
   \textbf{Bezeichner} & \usecase{uc:xcommand_deactivate}\\\hline\rowcolor[gray]{0.9}
   \textbf{Name} & XCommand de- bzw. reaktivieren\\
   \textbf{Version} & 1.0\\\rowcolor[gray]{0.9}
   \textbf{Autor} & Simon Binkert\\
   \textbf{Priorität} & mittel\\\rowcolor[gray]{0.9}
   \textbf{Kritikalität} & klein\\
   \textbf{Referenz} & \reffrequirement{frq:xcommand_deactivate}\\\rowcolor[gray]{0.9}
   \textbf{Kurzbeschreibung} & Der Nutzer möchte ein XCommand temporär de- bzw. reaktivieren.\\
   \textbf{Akteure} & Nutzer\\\rowcolor[gray]{0.9}
   \textbf{Auslösendes Ereignis} & Der Nutzer navigiert zur Einstellungsseite der Erweiterung.\\
   \textbf{Vorbedingung} & Mindestens ein XCommand ist in der Erweiterung installiert.\\\rowcolor[gray]{0.9}
   \textbf{Nachbedingung} & Das XCommand wurde de- bzw. reaktiviert.\\
   \textbf{Hauptszenario} & 
   	\begin{compactenum}
   	  \vspace{-12pt}
   	  \item Nutzer startet Browser.
   	  \item Nutzer navigiert zur Einstellungsseite der XCommander Erweiterungen.
   	  \item Nutzer wählt ein XCommand und deaktiviert es.
   	  \item Das XCommand erscheint nicht mehr in der Kommandoliste und kann nicht mehr verwendet werden.
   	  \vspace{-12pt}
   	\end{compactenum}\\\rowcolor[gray]{0.9}
   \textbf{Alternativszenarien} & 
   	\begin{compactenum}
   	  \vspace{-12pt}
   	  \item[3a.] Nutzer wählt ein XCommand und reaktiviert es.
   	  \item[4a.] Das XCommand erscheint wieder in der Kommandoliste und kann verwendet werden.
   	  \vspace{-12pt}
   	\end{compactenum}\\
   \textbf{Ausnahmeszenarien} & -\\\rowcolor[gray]{0.9}
   \textbf{Qualitäten} & \refqrequirement{qrq:browserunabhängigkeit}, \refqrequirement{qrq:usability}\\\hline
\end{longtable}

\newpage
\autoref{tab:uc_xcommand_run} dokumentiert den Anwendungsfall \refusecase{uc:xcommand_run}.
\begin{longtable}{p{0.31\textwidth}p{0.62\textwidth}}
\caption{\refusecase{uc:xcommand_run} - XCommand ausführen}\label{tab:uc_xcommand_run} \\
   \hline
   \textbf{Bezeichner} & \usecase{uc:xcommand_run}\\\hline\rowcolor[gray]{0.9}
   \textbf{Name} & XCommand ausführen\\
   \textbf{Version} & 1.0\\\rowcolor[gray]{0.9}
   \textbf{Autor} & Simon Binkert\\
   \textbf{Priorität} & gross\\\rowcolor[gray]{0.9}
   \textbf{Kritikalität} & gross\\
   \textbf{Referenz} & \reffrequirement{frq:xcommand_run}\\\rowcolor[gray]{0.9}
   \textbf{Kurzbeschreibung} & Der Nutzer möchte ein installiertes XCommand ausführen.\\
   \textbf{Akteure} & Nutzer\\\rowcolor[gray]{0.9}
   \textbf{Auslösendes Ereignis} & Der Nutzer öffnet die XCommander Erweiterung.\\
   \textbf{Vorbedingung} & Mindestens ein XCommand ist in der Erweiterung installiert.\\\rowcolor[gray]{0.9}
   \textbf{Nachbedingung} & Das XCommand wurde ausgeführt.\\
   \textbf{Hauptszenario} & 
   	\begin{compactenum}
   	  \vspace{-12pt}
   	  \item Nutzer öffnet das Kommandozeilen"=Fenster durch eine definierte Tastenkombination.
   	  \item Nutzer tippt ein XCommand und allfällige Argumente in die Kommandozeile.
   	  \item Die Eingabe der Argumente erfolgt in pseudo"=natürlicher Sprache.
   	  \item Während dem Tippen werden im Vorschaubereich des Kommandozeilen"=Fensters allfällige Information dargestellt.
   	  \item Drückt der Nutzer die Return"=Taste wird das XCommand ausgeführt.
   	  \vspace{-12pt}
   	\end{compactenum}\\\rowcolor[gray]{0.9}
   \textbf{Alternativszenarien} & - \\
   \textbf{Ausnahmeszenarien} & -\\\rowcolor[gray]{0.9}
   \textbf{Qualitäten} & \refqrequirement{qrq:browserunabhängigkeit}, \refqrequirement{qrq:usability}, \refqrequirement{qrq:sicherheit}\\\hline
\end{longtable}

\newpage
\autoref{tab:uc_xcommand_debug} dokumentiert den Anwendungsfall \refusecase{uc:xcommand_debug}.
\begin{longtable}{p{0.31\textwidth}p{0.62\textwidth}}
\caption{\refusecase{uc:xcommand_debug} - XCommand debuggen}\label{tab:uc_xcommand_debug} \\
   \hline
   \textbf{Bezeichner} & \usecase{uc:xcommand_debug}\\\hline\rowcolor[gray]{0.9}
   \textbf{Name} & XCommand debuggen\\
   \textbf{Version} & 1.0\\\rowcolor[gray]{0.9}
   \textbf{Autor} & Simon Binkert\\
   \textbf{Priorität} & mittel\\\rowcolor[gray]{0.9}
   \textbf{Kritikalität} & klein\\
   \textbf{Referenz} & \reffrequirement{frq:xcommand_debug}\\\rowcolor[gray]{0.9}
   \textbf{Kurzbeschreibung} & Ein Entwickler möchte sein XCommand debuggen können.\\
   \textbf{Akteure} & Entwickler\\\rowcolor[gray]{0.9}
   \textbf{Auslösendes Ereignis} & Der Entwickler installiert sein XCommand in der Erweiterung.\\
   \textbf{Vorbedingung} & Der Browser muss über einen Debugger verfügen.\\\rowcolor[gray]{0.9}
   \textbf{Nachbedingung} & -\\
   \textbf{Hauptszenario} & 
   	\begin{compactenum}
   	  \vspace{-12pt}
   	  \item Entwickler installiert sein XCommand und öffnet das Kommandozeilen"=Fenster.
   	  \item Entwickler öffnet Debugger des Browser.
   	  \item Entwickler setzt beliebige Breakpoints im Debugger.
   	  \item Entwickler führt sein XCommand aus.
   	  \vspace{-12pt}
   	\end{compactenum}\\\rowcolor[gray]{0.9}
   \textbf{Alternativszenarien} & - \\
   \textbf{Ausnahmeszenarien} & Verfügt der Browser über keinen Debugger, kann das XCommand nicht gedebugged werden.\\\rowcolor[gray]{0.9}
   \textbf{Qualitäten} & -\\\hline
\end{longtable}